#include<iostream>
#include<cstring>
using namespace std;
#define Max 1000

struct node{
    short a[Max];   //存放大数的数组
}s[255];    //矩形块的列数

int main(void){
    int c,n;
    int i,j,cnt=1;
    s[0].a[0]=1;    //默认初值
    s[1].a[0]=1;    //若只有2*1，则只有一种放法

    while(scanf("%d",&n)!=EOF){ //输入n
        for(i=2;i<=n;i++){
            c=0;
            for(j=0;j<cnt;j++){ //每个列数中对应位数运算
                s[i].a[j]=s[i-1].a[j]+2*s[i-2].a[j]+c;
                c=s[i].a[j]/10; //c为进位
                s[i].a[j]%=10;
            }
            while(c){
                s[i].a[cnt++]=c%10;
                c/=10;
            }
        }
        for(i=Max-1;s[n].a[i]==0;i--);    //高位没有意义的0
        for(;i>=0;i--){
            cout<<s[n].a[i];
        }
        cout<<endl;
    }
    return 0;
}